// @ fn Function 需要延时的函数
// @ delay Number 延时时间
// 防抖就是将函数的执行延迟一定时间
// 如果在该时间内重新触发事件
// 那么延迟的时间会重置
// 只有真正达到延迟时间，才会执行回调函数
function debounce(fn, delay) {
    // 定义个私有变量
    let timer
    // 返回一个函数 将所有传入的实参解构为一个数组
    return function (...args) {
        // 当计时器存在时 则清空计时器
        if (timer) {
            clearTimeout(timer)
        }
        // 设置一个计时器
        timer = setTimeout(() => {
            // 到点后运行重定向好的函数并传入对应的参数数组
            fn.apply(this, args)
        }, delay)
    }
}
function test() {
    console.log('2000ms :>> ')
}
setInterval(() => {
    // 支持链式调用 毕竟返回的是一个函数
    debounce(test, 2000)("1111", "222", "33", "4")
}, 10)

